/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function (height) {
  if (height.length === 0) return 0

  //数组长度
  let n = height.length
  //左、右指针
  let left = 0, right = n - 1
  //左、右指针的最高值
  let leftMax = 0, rightMax = 0
  //结果
  let res = 0

  while (left < right) {
    //如果左指针的高度小于右指针的高度：以左指针的高度为基准
    if (height[left] < height[right]) {
      //如果左指针高度大于左最大值，更新左最大值；反之，计算盛雨水的体积并累加给结果
      if (height[left] > leftMax) {
        leftMax = height[left]
      } else {
        res += leftMax - height[left]
      }
      //左指针右移一位
      left++
    } else {//如果右指针的高度小于左指针的高度：以右指针的高度为基准
      //如果右指针高度大于右最大值，更新右最大值；反之，计算盛雨水的体积并累加给结果
      if (height[right] > rightMax) {
        rightMax = height[right]
      } else {
        res += rightMax - height[right]
      }
      //左指针左移一位
      right--
    }
  }
  //返回结果
  return res
};